package gestorbienraizok.contratos;

import gestorBD.Controlador;
import gestorbienraizok.inmuebles.Inmueble;
import gestorbienraizok.usuarios.ClienteDemandador;
import gestorbienraizok.usuarios.Persona;
import java.util.Calendar;
import java.util.Date;

public abstract class Contrato {

    protected static int consecutivo = 0;
    private int codigo;
    private Date fecha;
    protected float valor;
    private long cedulaClienteOferente;
    private String codigoInmueble;

    public Contrato() {

    }

    Contrato(float valor, long cedulaClienteOferente, String codigoInmueble) {
        Contrato.consecutivo++;
        this.codigo = Contrato.consecutivo;
        this.fecha = Calendar.getInstance().getTime();
        this.valor = valor;
        this.cedulaClienteOferente = cedulaClienteOferente;
        this.codigoInmueble = codigoInmueble;
    }

    public static int getConsecutivo() {
        return Contrato.consecutivo;
    }

    public int getCodigo() {
        return this.codigo;
    }

    public Date getFecha() {
        return this.fecha;
    }

    public float getValor() {
        return this.valor;
    }

    public long getCedulaClienteOferente() {
        return this.cedulaClienteOferente;
    }

    public String getCodigoInmueble() {
        return this.codigoInmueble;
    }

    public static void setConsecutivo(int consecutivo) {
        Contrato.consecutivo = consecutivo;
    }

    public void setCodigo(int codigo) {
        this.codigo = codigo;
    }

    public void setFecha(Date fecha) {
        this.fecha = fecha;
    }

    public void setValor(float valor) {
        this.valor = valor;
    }

    public void setCedulaClienteOferente(long cedulaClienteOferente) {
        this.cedulaClienteOferente = cedulaClienteOferente;
    }

    public void setCodigoInmueble(String codigoInmueble) {
        this.codigoInmueble = codigoInmueble;
    }

    public Inmueble getInmueble() {
        return Inmueble.buscarInmueble(this.codigoInmueble);
    }

    public byte getDia() {
        return (byte) this.fecha.getDate();
    }

    public byte getMes() {
        return (byte) (this.fecha.getMonth() + 1);
    }

    public int getAnho() {
        return (this.fecha.getYear() + 1900);
    }

    public String tipoDeContrato() {
        return ((this instanceof Compraventa) ? "Compraventa" : "Arrendamiento");
    }

    public static Contrato buscarContrato(String codigoDelInmueble) {
        for (int i = 0; i < Controlador.getListaDePersonas().size(); i++) {
            Persona estaPersona = Controlador.getListaDePersonas().get(i);
            if (estaPersona instanceof ClienteDemandador) {
                ClienteDemandador esteClienteDemandador = (ClienteDemandador) estaPersona;
                for (int j = 0; j < esteClienteDemandador.getListaDeContratos().size(); j++) {
                    Contrato esteContrato = esteClienteDemandador.getListaDeContratos().get(j);
                    if (esteContrato.getCodigoInmueble().equalsIgnoreCase(codigoDelInmueble)) {
                        return esteContrato;
                    }
                }
            }
        }
        return null;
    }

    public String getResumen() {
        String descripcion = new String();

        String codigoContrato = String.format("%3s", this.codigo).replace(" ", "0");
        descripcion += String.format("%-16s", codigoContrato);

        descripcion += String.format("%-17s", this.getCodigoInmueble());
        String tipo = ((this.getCodigoInmueble().substring(0, 1).toLowerCase().equals("a")) ? "Apartamento" : "Casa");
        descripcion += String.format("%-14s", tipo);

        String direccion = this.getInmueble().getUnidad().getDireccion();
        descripcion += String.format("%-19s", direccion);

        String tipoContrato = this.tipoDeContrato();
        descripcion += String.format("%-19s", tipoContrato);

        String dia = String.format("%2d", this.getDia()).replace(" ", "0");
        String mes = String.format("%2d", this.getMes()).replace(" ", "0");
        String fechaDiaMesAnho = dia + "/" + mes + "/" + this.getAnho();
        descripcion += String.format("%-14s", fechaDiaMesAnho);

        descripcion += Controlador.formatearPrecio(this.getValor());

        return descripcion;
    }

}
